C ||C++语言 求高效的矩阵相乘程序

来源:百度知道 编辑:UC知道 时间:2024/06/02 15:27:02
现在编写一个迭代算法,需要用到矩阵相乘,但是矩阵A比较大,200行10W万列,迭代的时候要对矩阵A乘以一个构造矩阵B(10万行乘以10万列) 在乘以矩阵A的转置C,

我自己编写的矩阵相乘程序(用一维来代替二维,这样计算速度快一点点(测试过了))
int MulMatrix(double *mtrx1,int col1,int row1,double *mtrx2,int col2,int row2,double *mtrx3)//矩阵相乘:矩阵mtrx1和矩阵mtrx2相乘的矩阵mtrx3,col1,col2分别为矩阵1,2的行,row1,row2分别为矩阵1,2的列
{
clock_t start, finish;
double duration;
start = clock();
register int i,j,k;
for(i=0;i<col1;i++)
for(j=0;j<row2;j++){
mtrx3[i*row2+j]=0;
}//对mtrx3初始化为0
if(row1!=col2)
{return 0;}//判断第一个矩阵的列是不是和第二个矩阵的行相等,不相等返回0
else{
for(i=0;i<col1;i++)
for(j=0;j<row2;j++)
for(k=0;k<row1;k++)
{
mtrx3[i*row2+j]+=mtrx1[i*row1+k]*mtrx2[k*row2+j];
}
return 1;
}
finish=clock();
duration = (dou

用迭代计算量很大的,在怎么高效,这么大的计算量也是很慢的,建议还是从算法的角度来考虑吧

用迭代计算量很大的,在怎么高效,这么大的计算量也是很慢的,建议还是从算法的角度来考虑吧

矩阵相乘本来就很慢
记得最快也是O(n^2.xxx) xxx忘记了
你的code是最慢的O(n^3) 当然慢